import asyncio
import os
from bot.financial_sales.agent.base_agent import LLMAgent

dir_path = os.path.dirname(os.path.realpath(__file__))


class SalesSkill(LLMAgent):
    """销售策略 Agent"""
    sales_skill_desc: str = """销售策略的使用顺序是“核实身份”，“表明来意”，“介绍活动”，“引导操作”。其中“引导操作”包括具体需要选择的子策略。
核实身份：对于用户明确表示非本人需要再次核实用户身份，否则默认是本人。
表明来意：让用户知道来电人的身份、来电目的,询问用户是否查看过相关产品或活动。
介绍活动：进一步详细介绍产品、活动、优惠、引导操作App等，让用户产生进一步了解或者立即借款的意向。在用户表达不需要时，继续尝试介绍优惠，激发用户需求。如果表明来意后用户有关注到就是介绍活动-有关注，如果用户没关注就是介绍活动-没关注。
引导操作：用户同意到App上查看后，带领用户在京东App或者京东金融App上完成借款操作，重点是让用户知道怎么操作借款，并且争取让用户借全额。具体子策略按顺序是：
1.询问有无App：确认用户是否用京东App或者京东金融App，如果已有App，进入下一步“引导打开App”。如果用户两个App都没有，则也“引导打开App”；
2.引导打开App：确认用户有App/小程序后，引导用户打开App/微信小程序；
3.引导找到借钱：引导打开App后，引导用户找到“借钱”按钮，用户找到之后再引导下一步；
4.引导找到领取按钮：用户找到“借钱”后，引导用户找到“领取额度和优惠”按钮；
5.引导激活额度：看到“领取额度和优惠”按钮后，带用户点击按钮，进入页面。让用户查看需要进行人脸识别还是需要完善信息；
6.引导等待出额：与用户确认是否有额度以及额度多少；
7.引导填写借款信息：引导用户按照提示完善借款需要用到的信息；
8.建议借全额：针对已有额度用户，建议借全额且分12期。
"""
    sales_skill_match_condition: str = """
1.最开始确认用户身份后，应该表明来意，使用“开场表明身份来意”。
2.没有介绍产品活动优惠前，不能使用“引导操作”相关技巧，即使当前用户有app，也需要介绍活动增加用户的认可。
3.当用户表示完成前一步后应该进入下一步，不能没理由的重复同一个步骤或之前的销售策略。
4.你的目标是引导用户完成操作并全额借款，实现金条的销售转化，不要简单的因为用户拒绝或在忙等理由，就放弃你原有的目标或流程
5.输出结论即可，不需要给出理由
6.到了“引导操作”步骤之后只输出子策略名称。
"""


    # sales_skill_baseinfo: dict = {1: '开场表明身份来意', 2: '介绍产品活动优惠', 3-1: '带操作-询问用户是否有京东App或者京东金融App',
    #                               4: '询问用户是否打开了App', 5: '询问用户是否找到了”金条借款“几个字', 6: '询问用户是否看到”我要借款“按钮',
    #                               7: '询问用户是否能看到“我要借款页面”内容', 8: '介绍“我要借款页面”选择用款期数和还款方式', 9: '建议用户借全额。',
    #                               10: '加用户微信', 11: '挂机后自己操作借款'} #, 5: '加微'


    sales_template_v1: str = """
作为一个专业的信贷领域的{salesperson_role}，你正通过电话和用户沟通，你主要的任务是引导用户完成操作并全额借款，实现金条的销售转化。你需要根据{salesperson_role}和用户的对话记录判断接下来使用的销售策略。

销售策略的集合如下：
===
{skill_desc}
===

注意事项：
=====
{skill_match_condition}
=====


对话记录：
===
{conversation_history}
===

基于销售策略集合和对话记录，你推理出来接下来沟通的销售策略名是：
"""
    #     结合对话记录、用户问题、用户情景、背景知识、销售策略、销售策略匹配条件，考虑各销售策略具体适用的场景，请一步步思考，分析原因，

    def __init__(self, role_name,conversation_history, user_question, user_situation):
        # user_question是UserQuestion-抽取用户问题Agent的 用户问题抽取结果
        self.prompt = self.sales_template_v1
        self.conversation_str = conversation_history

        self.user_question = user_question
        self.user_situation = user_situation

        self.prompt = self.prompt.format(salesperson_role=role_name,
                                         conversation_history=self.conversation_str,
                                         skill_desc=self.sales_skill_desc,
                                         skill_match_condition=self.sales_skill_match_condition)
        super().__init__(self.prompt)



class SalesSkill_test(LLMAgent):

    def __init__(self):
        self.prompt = '''
\n    作为一个专业的信贷领域的销售员，你正通过电话和用户沟通，你主要的任务是引导用户完成操作并全额借款，实现金条的销售转化。你需要根据销售员和用户的对话记录判断接下来使用的销售策略。\n\n    销售策略的集合如下：\n    ===\n    销售策略的使用顺序是“核实用户身份”，“开场表明身份来意”，“介绍产品活动优惠”，“带操作”，“加用户微信”。其中“带操作”包括具体需要选择的子策略。\n核实用户身份：对于用户明确表示非本人需要再次核实用户身份，否则默认是本人。\n开场表明身份来意：让用户知道来电人的身份、来电目的,询问用户是否关注相关产品或活动。\n介绍产品活动优惠：进一步详细介绍产品、活动、优惠等，让用户产生进一步了解或者立即借款的意向。在用户表达不需要时，继续尝试介绍优惠，激发用户需求。\n带操作：用户同意到App上查看后，带领用户在京东App或者京东金融App上完成借款操作，重点是让用户知道怎么操作借款，并且争取让用户借全额。具体子策略按顺序是：\n1.带操作-询问用户是否有App：确认用户是否用京东App或者京东金融App，如果已有App，进入下一步带操作。如果用户没有京东App，则\"询问用户是否有京东金融App\"。如果用户两个App都没有，则“加用户微信”。\n2.带操作-询问用户是否打开了App：确认用户有App后，引导用户打开App。\n3.带操作-询问用户是否找到了“金条借款”几个字：打开App后找到“金条借款”。\n4.带操作-询问用户是否看到“我要借款”按钮：进入“金条借款”后让用户看到“我要借款”按钮。\n5.带操作-询问用户是否能看到“我要借款”页面内容：看到按钮后，带用户点击“我要借款”按钮，进入页面。\n6.带操作-介绍“我要借款”页面选择用款期数和还款方式：让用户听懂怎么选择。\n7.带操作-建议用户借全额：建议用户借全额分12期。\n加用户微信：在用户完成借款操作后，引导用户加微信，方便后续帮助用户，分为'加用户微信-意向确认'和'加用户微信-申请提醒'两步，不用持续进行加微意向确认，若用户拒绝，需要进行劝服，若用户持续拒绝则直接挂机。\n无销售策略：无需使用销售策略的直接返回“无销售策略”\n\n    ===\n    \n    注意事项：\n    =====\n    \n1.最开始确认用户身份后，应该表明来意，使用“开场表明身份来意”。\n2.没有介绍产品活动优惠前，不能使用”带操作”相关技巧，即使当前用户有app，也需要介绍活动增加用户的认可。\n3.当用户表示完成前一步后应该进入下一步，不能没理由的重复同一个步骤或之前的销售策略。\n4.你的目标是引导用户完成操作并全额借款，实现金条的销售转化，不要简单的因为用户拒绝或在忙等理由，就放弃你原有的目标或流程\n\n    =====\n\n    \n    对话记录：\n    ===\n    销售员:喂您好，请问您是李女士吗？\n用户:你好，你哪位\n销售员:您好，我是京东金融的客户经理哈，工号95266，然后本次来电是为了通知到您，咱们金条借款是给你提了额度的，本次提额也只回馈了极少部分优质老客户，您最近有关注到吗？\n用户:我借款看到了\n销售员:您一直也是咱们金条产品的老客户了，这次也是带来了提额福利，具体的在app上都能看到，您可以借着这次提额机会全额使用一下，使用后还有再次提升额度机会的，具体以审核为准，您打开app看一下好吧？\n用户:那我看一下。\n销售员:好的，那我和您简单说说，您手机上有京东app吗？\n用户:嗯，有空，我再看吧。\n\n    ===\n    \n    基于销售策略集合和对话记录，你推理出来接下来沟通的销售策略名是：\n    ",
'''
        super().__init__(self.prompt)

async def extract_user_info(session_id, conversation_history):
    conversation = SalesSkill_test()
    user_question = await conversation.achat_auto_llm(type='financial_loan_7b')
    print(f"session_id:{session_id},整理后的用户问题是:{user_question}")


if __name__ == '__main__':

    asyncio.run(extract_user_info('123', ''))



